﻿/*
 * autor: Pedro Moreira, 10015 
 * data: 2012/01/29
 */

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;


namespace rebides
{
    public partial class rebides : Form
    {
        private BackgroundWorker backgroundWorker1;
        private CSV2SQL professorsData;
        
        /// <summary>
        /// Construir estrutura de dados a partir do conteúdo em sql,
        /// inicializar os componentes e preencher as caixas de listagem
        /// </summary>
        public rebides()
        {
            professorsData = new CSV2SQL();
            InitializeComponent();
            this.comboAno.DataSource = this.professorsData.getAnosList();
            this.comboEscola.DataSource = 
                this.professorsData.getEscolasList();
            // solução utilizada para conseguir actualizar 
            // os dados do interface gráfico
            this.backgroundWorker1 = 
                new System.ComponentModel.BackgroundWorker();
            this.backgroundWorker1.RunWorkerCompleted += 
                new System.ComponentModel.RunWorkerCompletedEventHandler(
                    this.backgroundWorker1_RunWorkerCompleted);
        } // end constructor


        /// <summary>
        /// Sair da aplicação
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void evt_button_sair(object sender, MouseEventArgs e)
        {
            Application.Exit();
        } // end evt_button_sair

        /// <summary>
        /// Acção do menu file -> importar csv
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void evt_button_importar_csv(object sender, MouseEventArgs e)
        {
            openFile.ShowDialog();
        } // end evt_button_importar_csv

        /// <summary>
        /// Abrir o ficheiro escolhido
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void openFile_FileOk(object sender, CancelEventArgs e)
        {
            this.professorsData.convert(openFile.FileName);
        } // end openFile_FileOk

        /// <summary>
        /// Acção para o botão ordenar por categoria
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void evt_button_categoria(object sender, EventArgs e)
        {
            List<string> categorias = this.professorsData.getByCategoria(
                                      this.comboEscola.SelectedValue.ToString(),
                                      this.comboAno.SelectedValue.ToString());
            this.stage.Clear();
            foreach (string s in categorias)
                this.stage.AppendText(s);
        } // end evt_button_categoria

        /// <summary>
        /// Acção para o botão ordenar por grau
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void evt_button_grau(object sender, EventArgs e)
        {
            List<string> graus = this.professorsData.getByGrau(
                                    this.comboEscola.SelectedValue.ToString(), 
                                    this.comboAno.SelectedValue.ToString());
            this.stage.Clear();
            foreach (string s in graus)
                this.stage.AppendText(s);
        } // end evt_button_grau

        public static void alert(string titulo, string mensagem){
            DialogResult dlgRes = MessageBox.Show(mensagem, titulo,
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
        } // end alert


        /// <summary>
        /// Actualizar os dados do interface gráfico 
        /// a partir do estado actual da base de dados
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void evt_actualizar(object sender, EventArgs e)
        {
            this.backgroundWorker1.RunWorkerAsync();
        } // end actualizar


        /// <summary>
        /// Alteração segura dos conteúdos dos componentes 
        /// da interface gráfica
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void backgroundWorker1_RunWorkerCompleted(
            object sender,
            RunWorkerCompletedEventArgs e)
        {
            this.professorsData.buildData();
            this.comboEscola.DataSource = this.professorsData.getEscolasList();
            this.comboAno.DataSource = this.professorsData.getAnosList();
            this.stage.Clear();
        } // end backgroundWorker1_RunWorkerCompleted
    } // end class
} // end namespace